package fr.afcepf.al22.projet1.dao.implementation;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate4.HibernateTemplate;

import fr.afcepf.al22.projet1.dao.interfaces.IDaoCommentaire;
import fr.afcepf.al22.projet1.entity.Commentaire;
import fr.afcepf.al22.projet1.entity.Produit;
import fr.afcepf.al22.projet1.entity.Utilisateur;

public class DaoCommentaireImpl implements IDaoCommentaire {
	private final Logger log = Logger.getLogger(this.getClass());
	private HibernateTemplate ht;

	public void setSessionFactory(SessionFactory sf) {
		ht = new HibernateTemplate(sf);
	}
	@Override
	public Commentaire ajouterCommentaire(Commentaire commentaire) {
		log.info("DAO Commentaire : ajout commentaire");
		ht.save(commentaire);
		log.info("DAO Commentaire : ajout ok");
		return commentaire;
	}

	@Override
	public Commentaire modifierCommentaire(Commentaire commentaire) {
		log.info("DAO Commentaire : modification commentaire");
		ht.update(commentaire);
		log.info("DAO Commentaire : modification ok");
		return commentaire;
	}

	@Override
	public Boolean supprimerCommentaire(Commentaire commentaire) {
		log.info("DAO Commentaire : suppression commentaire");
		ht.delete(commentaire);
		log.info("DAO Commentaire : suppresssion ok");
		return true;
	}

	@Override
	public List<Commentaire> getCommentairesByUtilisateurs(
			Utilisateur utilisateur) {
		List<Commentaire> liste;
		log.info("DAO Commentaire : get commentaire by utilisateur");
		liste = (List<Commentaire>)ht.findByNamedParam("SELECT c FROM Commentaire c WHERE c.utilisateur.idUtilisateur = :pUser", "pUser", utilisateur.getIdUtilisateur());
		log.info("DAO Commentiare : get ok");
		return liste;
	}

	@Override
	public List<Commentaire> getCommentairesByProduit(Produit produit) {
		List<Commentaire> liste;
		log.info("DAO Commentaire : get commentaire by produit");
		liste = (List<Commentaire>)ht.findByNamedParam("SELECT c FROM Commentaire c WHERE c.produit.idProduit = :pProduit", "pProduit", produit.getIdProduit());
		log.info("DAO Commentaire : get ok");
		return liste;
	}

	@Override
	public Commentaire getCommentaireById(Integer id) {
		List<Commentaire> liste;
		log.info("DAO Commentaire : get commentaire by id");
		liste = (List<Commentaire>)ht.findByNamedParam("SELECT c FROM Commentaire c WHERE c.idCommentaire= :pId", "pId", id);
		log.info("DAO Commentaire : get ok");
		Commentaire retour = null;
		if(liste.size() == 1){
			retour = liste.get(0);
		}
		return retour;
	}

}
